home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / arcers / tar316.zip / CTHANDLE.ASM < prev    next >
Assembly Source File  |  1980-07-24  |  2KB  |  100 lines

  1. CT_PSW        struc
  2. flags        db    ?
  3. input        db      ?
  4. CT_PSW        ends
  5.  
  6. CT_SET        struc
  7. control        dw    ?
  8. data        dw    ?
  9. launch        dw    ?
  10. clear        dw    ?
  11. mask_reset    db    ?
  12. val_reset    db    ?
  13. mask_event    db    ?
  14. not_event    db    ?
  15. mask_ready    db    ?
  16. not_ready    db    ?
  17. mask_excep    db    ?
  18. not_excep    db    ?
  19. mask_state    db    ?
  20. inv_state    db    ?
  21. mask_dir    db    ?
  22. val_dir        db    ?
  23. mask_dma    db    ?
  24. done_dma    db    ?
  25. do_reset    db    ?
  26. request        db    ?
  27. online        db    ?
  28. int_enable    db    ?
  29. done_enable    db    ?
  30. dma_enable    db    ?
  31. CT_SET        ends
  32.  
  33. CT_PIC        struc
  34. base        dw    ?
  35. ack        db    ?
  36. chain        db    ?
  37. old        dd    ?
  38. number        dw    ?
  39. save        db    ?
  40. CT_PIC        ends
  41.  
  42. CT_EVENT    equ    20h
  43.  
  44. _DATA        segment word public 'DATA'
  45.         extrn    _ct_psw:byte
  46.         extrn    _ct_set:word
  47.             extrn    _ct_pic:word
  48. _DATA        ends
  49.  
  50. _TEXT        segment    byte public 'CODE'
  51.         assume    cs:_TEXT, ds:_DATA
  52.         public    _cthandle
  53. _cthandle    proc    far
  54.         push    ds
  55.         push    ax
  56.         push    dx
  57.         mov    ax,_DATA
  58.         mov    ds,ax
  59.  
  60.         mov    dx,word ptr _DATA:_ct_set[control]
  61.         in    al,dx
  62.         mov     ah,byte ptr _DATA:_ct_set[mask_event]
  63.                 or    ah,ah        ; is intr. detection possible?
  64.                 jz      short next    ; no
  65.         and    ah,al
  66.         cmp    ah,byte ptr _DATA:_ct_set[not_event]
  67.         jne    short next    ; controller set interrupt flag
  68.  
  69.         test    byte ptr _DATA:_ct_pic[chain],255
  70.         jz    short end    ; no other handler
  71.         push    bp
  72.         mov    bp,sp
  73.         mov    ax,word ptr _DATA:_ct_pic[old]
  74.         mov    dx,word ptr _DATA:_ct_pic[old+2]
  75.         xchg    ss:[bp+8],dx
  76.         xchg    ss:[bp+6],ax
  77.         mov    ds,dx
  78.         pop    bp
  79.         pop     dx
  80.         retf    ; far jump to old handler
  81. next:
  82.         or    byte ptr _DATA:_ct_psw[flags],CT_EVENT
  83.         mov    byte ptr _DATA:_ct_psw[input],al
  84. end:
  85.         mov    dx,word ptr _DATA:_ct_pic[base]
  86.         mov    al,byte ptr _DATA:_ct_pic[ack]
  87.         cli
  88.         out    dx,al    ; acknowledge end-of-interrupt
  89.         mov    ax,20h
  90.         cmp    dx,ax    ; primary controller?
  91.         je    short return
  92.         out    20h,al
  93. return:         pop    dx
  94.         pop    ax
  95.         pop    ds
  96.         iret
  97. _cthandle    endp
  98. _TEXT        ends
  99.         end
  100.